iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0

Day 6— Terraform基礎 —Terraform 工作流程

文章目標:詳細介紹 Terraform 的工作流程,讓讀者了解如何使用 Terraform 開始管理基礎架構。

Day 6 — Terraform基礎 — Terraform 工作流程

文章同步分享到

Terraform工作流 ( Workflow ) 的概念

Workflow的實際執行位置

在Terraform工作流中,分成兩個主要部分會在不同的地方執行。

  1. Terraform init / fmt / validate / plan :都會在本地電腦完成配置與撰寫

  2. Terraform apply / destroy :會在雲端/地端架構中實際執行。

Workflow的相關說明

  1. Terraform init:初始化本地 Terraform 環境

  2. Terraform fmt / validate:格式化 Terraform 代碼與驗證 Terraform 代碼的語法與結構。

  3. Terraform plan:比較 Terraform 狀態和雲端中實際狀態,建立並顯示一個執行計畫,不會實際改變部署環境。

  4. Terraform apply:根據計畫執行實際的基礎架構創建或更改操作。

  5. Terraform destroy:刪除此特定 Terraform 環境所管理的所有資源。

Terraform工作流 ( Workflow ) 的概念

實際Terraform操作

任務目標

  1. 使用GCP的cloud shell環境,來執行terraform。

  2. 使用terrafrom 產生你的第一個雲端設施服務:GCS存儲服務,理解terraform的workflow流行。

  3. 確認五個部分的差異,都完全理解。

創建GCP專案

到GCP的專案頁面 https://console.cloud.google.com/,點選左上角選擇專案的視窗創建一個專案tf101

  • 記得你的專案ID,後面會用到

創建GCP專案

創建GCP專案名稱

啟動cloud shell並輸入代碼

創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。

啟動cloud shell

新建或開啟main.tf的檔案

進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。

這段 Terraform 代碼是用來管理 Google Cloud Platform (GCP) 資源的,主要是創建一個 Google Cloud Storage (Bucket)。

記得你需要將 <your gcp project> 替換為實際的 GCP 專案名稱。

  • provider 用來指定 Terraform 將要使用的提供者,這裡是 “google”,表示要使用 Google Cloud 的資源。
  • project 是你的 GCP 專案名稱,你需要將 替換為實際的 GCP 專案名稱。
    region 是指定 GCP 資源所在的區域,這裡是 “asia-east1”,表示將在亞洲的東部區域創建資源。
  • resource 塊用來定義要創建的資源,這裡是一個 Google Cloud Storage 存儲資源,它將被命名為 “quick-start-gcs-bucket”。
  • location 指定了存儲資源所在的區域,這裡也是 “asia-east1”,與上述提供者的區域相同。
  • force_destroy 設置為 true 意味著在刪除這個 Terraform 設定時,Terraform 會試圖強制刪除這個存儲資源,即使它包含了資源。

範例程式碼

可以到下方的github連結中,下載對應的參考程式碼

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code

  2. Day 6- Terraform基礎 -Terraform 工作流程

    provider "google" {
      project = "<your gcp project>"
      region  = "asia-east1"
    }

    resource "google_storage_bucket" "quick-start-gcs" {
      name          = "quick-start-gcs-bucket"
      location      = "asia-east1"
      force_destroy = true
    }

範例程式碼 on cloud shell

嘗試執行terraform的五個步驟部署代碼

接下來我們會利用上面的範例程式碼,來進行後續的練習:

# terraform workflow

# 1. 初始化本地 Terraform 環境
terraform init

# 2. 格式化 Terraform 代碼。驗證 Terraform 代碼的語法與結構
terraform fmt
terraform validate

# 3. 比較 Terraform 狀態和雲端中實際狀態,建立並顯示一個執行計畫
terraform plan

# 4. 根據計畫執行實際的基礎架構創建或更改操作
terraform apply

# 5. 刪除此特定 Terraform 環境所管理的所有資源
terraform destroy
  1. 初始化本地 Terraform 環境 (terraform init):terraform init用於初始化 Terraform 專案。它會下載所需的提供者插件,確保 Terraform 可以正確地管理你的基礎架構。執行此命令後,通常會在工作目錄中生成一個名為 .terraform 的目錄。

  2. 格式化 Terraform 代碼 (terraform fmt) 和驗證代碼 (terraform validate):
    terraform fmt 用於自動格式化 Terraform 代碼,以確保代碼風格一致且易讀。
    terraform validate 用於驗證 Terraform 代碼的語法和結構是否正確,有助於檢查是否存在語法錯誤或不合規範的部分。

  3. 比較 Terraform 狀態和雲端中實際狀態,建立並顯示一個執行計畫 (terraform plan):
    terraform plan 命令用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構的實際狀態,並列出預計創建、變更或刪除的資源。這有助於你了解 Terraform 將對基礎架構進行的操作,但不會實際執行這些操作。

  4. 根據計畫執行實際的基礎架構創建或更改操作 (terraform apply):terraform apply 命令用於根據之前生成的計畫執行實際的基礎架構操作。這包括創建新的資源、更新現有的資源或刪除不再需要的資源。在執行此命令之前,你應該仔細審查 terraform plan 的輸出,確保操作是符合預期的。

  5. 刪除此特定 Terraform 環境所管理的所有資源 (terraform destroy):terraform destroy 命令用於刪除由 Terraform 管理的所有資源,將基礎架構還原到初始狀態。請謹慎使用此命令,因為它會永久刪除資源。

步驟一:terraform init

  1. 在vscode上開啟終端機,來執行terraform的部署

  2. 執行 terraform init 初始化本地 Terraform 環境。

步驟一:terraform init 開啟終端機

步驟一:執行terraform init

步驟二:terraform fmt 與 terraform validate

  • 執行 terraform fmt 可以格式化 Terraform 代碼。

  • 執行 terraform validate 可以驗證 Terraform 代碼的語法和結構是否正確 。

步驟二:terraform fmt 與 terraform validate

步驟三:terraform plan

  • 執行 terraform plan 用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構的實際狀態,並列出預計創建、變更或刪除的資源。

  • 這段 Terraform 代碼主要是創建一個 Google Cloud Storage (Bucket)。

步驟三:terraform plan

步驟四:terraform apply

  • 執行 terraform apply 用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構。

  • 點選yes同意部署架構,並等待生成完成。

  • 到GCP的GCS中確認資源生成

步驟四:terraform apply

步驟四:terraform plan GCS

步驟四:在GCP介面上看到GCS已經創建

步驟五:terraform destroy

  • 執行 terraform destroy 命令用於刪除由 Terraform 管理的所有資源,將基礎架構還原到初始狀態。

  • 點選yes同意移除架構,並等待移除完成。

  • 到GCP的GCS中確認資源消失

步驟五:terraform destroy

步驟五:terraform destroy 點選yes同意移除架構

步驟五:在GCP介面上看到GCS已經刪除

總結 Summary

  1. Terraform工作流 ( Workflow ):了解工作流中五個流程的各自定位,
    與 Terraform init / fmt / validate / plan / apply / destroy 指令各自代表的意義。

  2. 執行terraform的五個步驟部署代碼:實際部署了解一個 Google Cloud Storage (Bucket),並在cloud shell上做操作,並利用五個步驟理解Terraform工作流。最後理解 Terraform init / fmt / validate / plan / apply / destroy 指令部署一個 Google Cloud Storage (Bucket)時,實際運作的意義。

相關連結

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code

  2. Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice

  3. 歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform


上一篇
Day 5— Terraform基礎 — 掌握 Terraform 元件
下一篇
Day 7— Terraform基礎 —效率提升:使用 bash alias
系列文
Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構 共 31 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言